#ifndef DATE_H
#define DATE_H

#include <ctime>
#include <string>
#include <stdexcept>

class Date
{
public:
    // 构造当前时间
    Date() : m_time(std::time(nullptr)) {}

    // 时间计算（返回新对象）
    Date addDays(int days) const
    {
        struct tm tm = localTime();
        tm.tm_mday += days;
        return Date(std::mktime(&tm));
    }

    // 格式化输出（线程安全）
    std::string toString(const char *format = "%Y-%m-%d") const
    {
        struct tm tm = localTime();
        char buffer[64];
        if (!std::strftime(buffer, sizeof(buffer), format, &tm))
        {
            throw std::runtime_error("日期格式化失败");
        }
        return buffer;
    }
    // Date.h 新增方法
    time_t toTimeT() const
    {
        return m_time;
    }

public:
    time_t m_time;

    // 获取本地时间结构（Fedora专用线程安全版本）
    struct tm localTime() const
    {
        struct tm tm;
        localtime_r(&m_time, &tm); // Linux 专用函数
        return tm;
    }

    // 私有构造函数用于内部转换
    explicit Date(std::time_t t) : m_time(t) {}
};

#endif // DATE_H
